import store from '@/store'
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  //进行重定向默认为登录页
  // {
  //   path: '/',
  //   redirect: '/login'
  // },
  {
    path: '/reg',
    component: () => import('@/views/register')
    //webpack提供import函数来路由懒加载导入组件
    //路由懒加载，就是页面路由路径切换到/reg,才去加载对应组件代码
    //好处：让首页文件体积更小，打开更快
  },
  {
    path: '/login',
    component: () => import('@/views/login')
  },
  {
    path: '/',
    component: () => import('@/views/layout'),
    //重定向,默认显示首页中的二级路由
    redirect: '/home',
    //在页面中嵌套路由一级路由‘/方法’，二级路由不需要/
    //一级页面在app中学routerview，二级路由在对应的上一级中写
    children: [
      {
        path: 'home',
        component: () => import('@/views/home')
      },
      {
        path: 'user-info',//在设置导航栏是已经从后端拿到了定义的路由名字，所以名字只能是user-info
        component: () => import('@/views/User/userInfo.vue')
      },
      {
        path: 'user-avatar',
        component: () => import('@/views/User/userAvatar')
      },
      {
        path: 'user-pwd',
        component: () => import('@/views/User/userPwd')
      },
      {
        path: 'art-cate',
        component: () => import('@/views/article/artCate')
      },
      {
        path: 'art-list',
        component: () => import('@/views/article/artList')
      }

    ]
  },


]

const router = new VueRouter({
  routes
})
//无需验证token的页面
const whiteList = ['/login', '/reg']

//全局路由守卫 beforEach
router.beforeEach((to, from, next) => {
  // store.dispatch('initUserInfo')
  const token = store.state.token
  if (token) {
    //本地有token值才会打开发送用户请求
    // store.dispatch('initUserInfo')
    //如果有token，证明已登录
    if (!store.state.userInfo.username) {
      store.dispatch('initUserInfo')
    }
    next()
  } else {
    //数组includes（值）作用：判单数组里面的值是否出现过，出现过则返回true
    if (whiteList.includes(to.path)) {
      //未登录可访问路由地址，放行
      next()
    } else {
      //未登录强制跳转到登录页
      next('/login')
    }
  }
})

export default router
// 推出登陆，重新登陆只走相关组件（异步dom切换，不会导致所有代码冲洗执行，APP。vue不走）
// 解决：
// 1.在登陆页面created中利用dispatch调用函数
// 2.在全局前置路由守卫中写（路由跳转时，判断+获取）